#include <iostream>
#include <string>
#include <unistd.h>
#include <mysql/mysql.h>

const std::string host = "localhost";
// const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string passwd = "123456";
const std::string db = "conn";
const unsigned int port = 8080;



int main()
{
    // std::cout << "mysql client version: " << mysql_get_client_info() << std::endl;

    //初始化
    MYSQL* my = mysql_init(nullptr);
    if(nullptr == my)
    {
        std::cerr << "init MySQL error" << std::endl;
        return 1;
    }

    //连接数据库
    if(mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),db.c_str(),port,nullptr,0) == nullptr)
    {
        std::cerr << "connect MySQL error" << std::endl;
        return 2;
    }
    mysql_set_character_set(my,"utf8");


    //增删改最好处理
    // std::string sql = "update user set name='Jimmy' where id=2";
    // std::string sql = "insert into user (name,age,telephone) values ('张三',19,'8329721')";
    // std::string sql = "delete user where id=1";

    //select要做后面的操作
    std::string sql = "select * from user";
    // std::string sql = "select name,age from user where id = 3";
    int n = mysql_query(my,sql.c_str());

    if(n==0)
    {
        //正常输出
        std::cout<<sql<<" success " << std::endl;
    }
    else
    {
        std::cerr<<sql<<" failed: " << std::endl;
        return 3;
    }

    //下面全部都是对res进行操作
    MYSQL_RES  *res = mysql_store_result(my);
    if(nullptr == res)
    {
        std::cerr << "mysql_store_result error" << std::endl;
        return 4;
    }
    
    //将行和列取出来
    my_ulonglong rows = mysql_num_rows(res);
    my_ulonglong fields = mysql_num_fields(res);
    // std::cout << "行: " << rows << std::endl;
    // std::cout << "列: " << fields << std::endl;

    //属性
    MYSQL_FIELD *fields_array = mysql_fetch_fields(res);
    for (int i = 0;i < fields;i++)
    {
        std::cout << fields_array[i].name << "\t";
        //可以通过fields_array[i].来看结构体中有啥属性
    }
    std::cout << std::endl;
    std::cout << fields_array[0].db << " " << fields_array[0].table << std::endl;



    //内容
    for(int i = 0;i < rows;i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for(int j = 0;j < fields;j++)
        {
            std::cout << row[j] << "\t";
        }
        std::cout << std::endl;
    }

    



    //输入操作数据库
    // std::cout << "connect success" << std::endl;
    // std::string sql;
    // while(true)
    // {
    //     std::cout << "MySQL >>> ";
    //     if(!std::getline(std::cin,sql)||sql == "quit")
    //     {
    //         std::cout << "Byebye" << std::endl;
    //         break;
    //     }
    //     int n = mysql_query(my,sql.c_str());
    //     if(n==0)
    //     {
    //         //正常输出
    //         std::cout<<sql<<" success: " << n << std::endl;
    //     }
    //     else
    //     {
    //         std::cerr<<sql<<" failed: " << n << std::endl;
    //     }
    // }
    //关闭
    mysql_free_result(res);
    mysql_close(my);

    return 0;
}



